#!/bin/sh
#Date: 2020-09-01 10:25:02
#Author: Bruce.cheng
#Mail: bruce.cheng@puman.com
#Function: spring boot jar包 启动程序
#Version: 1.0

# 定义参数
# 定义APP文件名（前缀即可）
APP_NAME_PREFIX=$1
# 部署环境（举例：dev、uat、prod...等）,默认dev
APP_RUN_ENV=$2
# 配置运行时使用最小内存（注：不含单位）默认单位：m,默认512
APP_RUN_MIN_RAM=$3
# 配置运行时使用最大内存（注：不含单位）默认单位：m,默认1024
APP_RUN_MAX_RAM=$4
# 依赖外部配置文件（注：含文件后缀名）
APP_RUN_CONFIG_FILE=$5

# 获取当前时间
DATE=$(date +%Y.%m.%d.%H.%M.%S)

if [ -z $APP_NAME_PREFIX ]; then
    echo "缺少部署文件前缀，程序退出"
    exit 1
fi

if [ -n "$APP_RUN_ENV" ]; then
    APP_RUN_ENV="-Dspring.profiles.active=${APP_RUN_ENV}"
else
    APP_RUN_ENV="-Dspring.profiles.active=dev"
fi
echo "运行环境：${APP_RUN_ENV}"

if [ -n "$APP_RUN_MIN_RAM" ]; then
    APP_RUN_MIN_RAM="-Xmx${APP_RUN_MIN_RAM}m"
else
    APP_RUN_MIN_RAM="-Xmx512m"
fi
echo "设置运行最小内存：${APP_RUN_MIN_RAM}"

if [ -n "$APP_RUN_MAX_RAM" ]; then
    APP_RUN_MAX_RAM="-Xmx${APP_RUN_MAX_RAM}m"
else
    APP_RUN_MAX_RAM="-Xmx1024m"
fi

echo "设置运行最大内存：${APP_RUN_MAX_RAM}"

if [ -n "$APP_RUN_CONFIG_FILE" ]; then
    APP_RUN_CONFIG_FILE="--spring.config.location=${APP_RUN_CONFIG_FILE}"
    echo "设置运行使用外部配置文件：${APP_RUN_CONFIG_FILE}"
fi

echo "获取或者设置环境变量中"

# 定义环境变量（预防未配置运行环境变量）
export JAVA_HOME=/usr/local/java/jdk1.8.0_202 # 注：根据自己环境调整
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME PATH CLASSPATH JRE_HOME



# 新文件目录（注：上传目录根据自己需求调整）
NEW_DIR=/root

echo "设置上传文件目录：${NEW_DIR}"


# 定义程序目录（注：部署目录根据自己需求调整）
DIR=/www/apps/$APP_NAME_PREFIX

echo "部署文件目录：${DIR}"


# 切换目录
cd $NEW_DIR

# 定义文件名
NEW_FILE_NAME=$(ls ${NEW_DIR}/${APP_NAME_PREFIX}*.jar)

if [ -z $NEW_FILE_NAME ]; then
    echo "未找部署文件，退出脚本"
    exit 1
fi

echo "获取新文件名：${NEW_FILE_NAME}"

# 校验文件夹是否存在，不存在新建
if [ ! -d $DIR ]; then
    mkdir -p $DIR
    echo "第一次部署，新建文件夹"
fi

# 切换目录
cd $DIR

# 获取源版本文件名
SOURCE_JAR_FILE=$(ls *.jar)

echo "获取源文件名：${SOURCE_JAR_FILE}"

# 检查是否存在备份文件夹
if [ ! -d $DIR/backup ]; then
    mkdir -p $DIR/backup
fi

# 切换目录
cd $DIR

# 获取进程PID
PID=$(ps -ef | grep $SOURCE_JAR_FILE | grep -v grep | awk '{print $2}')

if [ $PID -ge 0 ]; then
    # 干掉老进程
    kill -9 $PID
fi

echo "备份源文件"

# 备份文件件
mv ./$SOURCE_JAR_FILE ./backup/${SOURCE_JAR_FILE}.$DATE.bak

# 移动文件
mv -f $NEW_FILE_NAME .

# 获取文件名
EXECUTE_FILE=$(ls *.jar)

echo "文件名：${EXECUTE_FILE}"

# 拼接可执行脚本 CODE
nohup java  -jar $APP_RUN_MIN_RAM $APP_RUN_MAX_RAM $APP_RUN_ENV $EXECUTE_FILE $APP_RUN_CONFIG_FILE >nohup.log &

echo '部署成功，退出脚本'
exit 0
